function Foo(){

}
//函数也是一个对象
// console.log(foo.__proto__) //函数作为对象来说，它也是有[[prototype]],隐式原型
// console.log(Object.getPrototypeOf(foo))

//函数它因为是一个函数，所有它还会多出来一个显示原型属性：prototype
// console.log(foo.prototype)

var f1 = new Foo()
var f2 = new Foo()
console.log(f1.__proto__ === Foo.prototype)
console.log(f2.__proto__ === Foo.prototype)
// f1.__proto__ = foo.prototype
// f2.__proto__ = foo.prototype
f1.__proto__.name = 'scott'
// 更好的方法 
Foo.prototype.name="scott1"
console.log(f2.name)



// new操作符
// 1，在内存中创建一个新的对象（空对象）
// 2,这个对象内部的[prototype]属性会被赋值为该构造函数的protype属性
// 3.构造函数内部的this,会指向创建出来的新对象
// 4.执行函数的内部代码(函数体代码)
// 5.如果构造函数没有返回非空对象，则返回创建出来的新对象
